# -*- codeing = utf-8 -*-
# @Time : 2020/10/17 20:30
# @Author : 阳某
# @File : 数据结构.py
# @Software : PyCharm



import pandas as pd
import numpy as np

# Series:一维数据，一行或一列,Series是一种类似于一维数组的对象，它由一组数据（不同数据类型）以及一组与之相关的数据标签（即索引）组成。
# 仅有的数据列表即可以产生最简单的Series
s1 = pd.Series([1, 'a', 5.2, 7])
print(s1)  # 左侧为索引，右侧是数据
print(s1.index)  # 获取索引
print(s1.values)  # 获取数据

# 创建一个具有标签索引的Series
s2 = pd.Series([1, 'a', 5.2, 7], index=['d', 'b', 'a', 'c'])
print(s2)
print(s2.index)

# 使用字典创建Series、
sdata = {'Ohio': 35000, 'Texas': 72000, 'Oregon': 16000, 'Utah': 5000}
s3 = pd.Series(sdata)
print(s3)

# 根据标签索引查询数据，类似字典
print(s2['a'],type(s2['a']))
print(s2[['b','a']])    # 取b，a两行
print(type(s2[['b','a']]))  #<class 'pandas.core.series.Series'>

# Dataframe:二维数据，整个表格，多行多列
# DataFrame是一个表格型的数据结构
# 每列可以是不同的值类型（数值、字符串、布尔值等）
# 既有行索引index,也有列索引columns
# 可以被看做由Series组成的字典
# 创建dataframe最常用的方法，见02节读取纯文本文件、excel、mysql数据库

# 根据多个字典创建dataframe
data={
        'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
        'year':[2000,2001,2002,2001,2002],
        'pop':[1.5,1.7,3.6,2.4,2.9]
    }
df = pd.DataFrame(data)
print(df)
print(df.dtypes)    #查看每一列的数据类型
print(df.columns)
print(df.index)

#  从DataFrame中查询出Series
# 如果只查询一行、一列，返回的是pd.Series
# 如果查询多行、多列，返回的是pd.DataFrame

print(df)
print(df['year'])       #查询一列
print(type(df['year']))     #<class 'pandas.core.series.Series'>
print(df[['year','pop']])   #   查看指定列名的两列
print(type(df[['year','pop']]))     #<class 'pandas.core.frame.DataFrame'>

print(df.loc[1])    #查第二行
print(type(df.loc[1]))      #还是series类型

print(df.loc[1:3])  #查二到3行
print(type(df.loc[1:3]))    #dataframe类型
